package br.com.biavan.controle;

import java.util.ArrayList;
import java.util.List;

import br.com.biavan.inout.Entrada;
import br.com.biavan.inout.Saida;
import br.com.biavan.modelo.Jogada;
import br.com.biavan.modelo.Matriz;

public class ControlaMatriz {
	private Matriz matriz;
	private Saida saida;
	private Entrada entrada;
	private Jogada jogada;
	private List<String> niveis;
	private int nivelAtual;
	private static ControlaMatriz instancia;
	
	private ControlaMatriz() {
		entrada = new Entrada();
		jogada = new Jogada();
		niveis = new ArrayList<String>();
		niveis.add("nivel1");
		niveis.add("nivel2");
		nivelAtual = 0;
	}
	
	public static ControlaMatriz getInstance() {
		if (instancia == null) {
			instancia = new ControlaMatriz();
		}
		return instancia;
	}
	
	public Matriz getMatriz() {
		return matriz;
	}
	
	public void criarJogo() {
		matriz = entrada.carregarNivel(niveis.get(nivelAtual));
		saida = new Saida(matriz);
	}
		
	public void executar() {
		saida.mensagem("Nivel:" + (nivelAtual + 1));
		saida.show();
		if (matriz.hasCelulas()) {
			jogada.setJogada(entrada.getScan().nextLine());
	
			if (!jogada.getJogada().contains("SAIR")) {
				if (jogada.estaCriada()) {
					matriz.move(jogada.getDe(), jogada.getPara());
					matriz.reorganizar();
				} else {
					saida.mensagem("Jogada invalida");
				}
				executar();
			}
		} else {
			if (nivelAtual >= niveis.size()) {
				saida.mensagem("Parabéns!!!");
			} else {
				nivelAtual++;
				criarJogo();
				executar();
			}
			
		}
	}	
}
